package com.zk.schedule;

import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 操作适配器
 * Created by hh on 9/11/15.
 */
public class OpAdapter {
    private static ZkScheduleManager scheduleManager;

    public static void setScheduleManager(ZkScheduleManager scheduleManager) {
        OpAdapter.scheduleManager = scheduleManager;
    }
    ///////////////////////////////////////// 信息获取 start ////////////////////////////////////
    /**
     * 获取当前节点的server id
     * @return 当前节点的server id
     */
    public static String loadServerId() {
        return scheduleManager.getScheduleServerUuid();
    }

    /**
     * 获取所有注册的节点名称，包含不执行部分任务的节点。
     * @return 所有注册的节点名称
     */
    public static List<String> loadAllServers() {
        return scheduleManager.getScheduleDataManager().loadServerNames();
    }

    /**
     * 获取停掉的节点(因为节点停掉之后，会从zk上移除，所以无法获取)
     * @return 停掉的节点
     */
    @Deprecated
    public static List<String> loadIgnoreServers() {
        return null;
    }

    /**
     * 获取所有注册的任务名称，包含停掉的任务
     * @return 所有注册的任务名称
     */
    public static List<String> loadAllTaskNames() {
        return scheduleManager.getScheduleDataManager().loadTaskNames();
    }

    /**
     * 获取某个任务在哪些节点不能执行
     * @param taskName 任务名
     * @return 不能执行的节点
     */
    public static List<String> loadIgnoreTaskServers(String taskName) {
        if(StringUtils.isBlank(taskName)) {
            return new ArrayList<>();
        }
        return scheduleManager.getScheduleDataManager().loadIgnoreTaskServers(taskName);
    }

    /**
     * 获取任务分配给了哪个server
     * @param taskName 任务名
     * @return 任务分配给了哪个server
     */
    public static List<String> loadTaskServers(String taskName) {
        if(StringUtils.isBlank(taskName)) {
            return new ArrayList<>();
        }
        return scheduleManager.getScheduleDataManager().loadTaskServers(taskName);
    }
    ///////////////////////////////////////// 信息获取 end///////////////////////////////////////

    /**
     * 启动server
     * @throws Exception
     */
    public static void startServer() throws Exception {
        scheduleManager.reInit();
    }

    /**
     * 停止server
     */
    public static void stopServer() {
        scheduleManager.stopServer();
    }

    /**
     * 暂停任务
     * @param taskName 任务名
     * @param serverId serverId
     * @param isAllNode true:全部节点,false:serverId所在节点
     */
    public static void stopTask(String taskName, String serverId, Boolean isAllNode) {
        scheduleManager.getScheduleDataManager().ignoreTask(taskName, serverId, isAllNode);
    }

    /**
     * 启动任务
     * @param taskName 任务名
     * @param serverId serverId
     * @param isAllNode true:全部节点,false:serverId所在节点
     */
    public static void startTask(String taskName, String serverId, Boolean isAllNode) {
        scheduleManager.getScheduleDataManager().removeIgnoreTask(taskName, serverId, isAllNode);
    }




}
